const fs = require("fs");
const path = require('path')
const Koa = require('koa')
const cors = require('@koa/cors')
const router = require('../router')
const koaStatic = require('koa-static')
const { koaBody } = require('koa-body');
const { format } = require("date-fns"); // npm i date-fns
// 错误处理
const errHandler = require('./errHandler');
//参数验证导入
const parameter = require('koa-parameter');
const app = new Koa();
app.use(cors())
//路由之前 使用中间件
app.use(koaBody({
  multipart: true,
  formidable: {
    uploadDir: path.join(__dirname, '../uploads'),
    keepExtensions: true, // 保持文件的后缀
      maxFieldsSize: 10 * 1024 * 1024, // 文件上传大小限制
      // onFileBegin: (name, file) => {
      //   // 无论是多文件还是单文件上传都会重复调用此函数
      //   // 最终要保存到的文件夹目录
      //   const dirName = format(new Date(), "yyyyMMddhhmmss");

      //   const dir = path.join(__dirname, `../upload/${dirName}`);
      //   // 检查文件夹是否存在如果不存在则新建文件夹
      //   if (!fs.existsSync(dir)) {
      //       fs.mkdirSync(dir);
      //     }
      //   // 文件名称去掉特殊字符但保留原始文件名称
      //   const fileName = file.name
      //     .replaceAll(" ", "_")
      //     .replace(/[`~!@#$%^&*()|\-=?;:'",<>\{\}\\\/]/gi, "_");
      //   file.name = fileName;
      //   // 覆盖文件存放的完整路径(保留原始名称)
      //   file.path = `${dir}/${fileName}`;
      // }
     
  }
}));
app.use(koaStatic(path.join(__dirname, '../uploads')))
// 参数校验
app.use(parameter(app))
app.use(router.routes()).use(router.allowedMethods())
// app.use(async ctx => {
//     ctx.body = 'Hello htzztraining API平台正运行';
//   });
//错误处理
app.on('error', errHandler)
module.exports = app